'''
问题:
编写一个程序，根据给定的公式计算并打印值:Q = math.sqrt(2(C*D)/H)。
以下是C和H的固定值:C是50。H是30。D是一个变量，它的值应该以逗号分隔的序列输入到程序中。
例子假设程序的输入序列是逗号分隔的:100，150，180，
程序输出为:18，22，24
'''

#方法1
# import math
# def calculate(D,H=30,C=50):
#     reslutlist = []
#     for i in D:
#         if int(i)<0:
#             print("Q不能为负数")
#             return 0
#         else:
#             # reslutlist.append(round(math.sqrt(2*(C*int(i))/H),2))
#             reslutlist.append(int(math.sqrt(2 * (C * int(i)) / H)))
#     print(reslutlist)
# numS = input("输入以逗号分隔的Q:").strip().split(',')
# calculate(numS)

#方式二：我觉得计算就是计算，不需要在计算的函数里面夹杂一些别的判断等等之类的语句。简单一点，单纯一点
# 所以我考虑使用装饰器来优化一下
# def number_check(jj):
#     #装饰函数
#     def wrapper(func):
#         def deco(*args, **kwargs):
#             for i in args[0]:
#                 if int(i)<0:
#                     print("不能输入小于零的数字")
#                     return 0
#                 else:
#                     for i in range(len(args[0])):
#                         args[0][i] = int(args[0][i])
#             print(jj)
#             return  func(*args, **kwargs)
#         return deco
#     return wrapper
# @number_check("通过math.sqrt(2(C*D)/H)公式计算Q的值")
# def calculate(D,H=30,C=50):
#     res = []
#     for i in D:
#          Q = int(math.sqrt(2*(C*i)/H))
#          res.append(Q)
#     print(res)
# numS = input("输入以逗号分隔的Q:").strip().split(',')
# calculate(numS)

#方法3:能不能提高一下计算的效率，想通过numpy来实现
import numpy as np
def number_check(jj):
    #装饰函数
    def wrapper(func):
        def deco(*args, **kwargs):
            for i in args[0]:
                if int(i)<0:
                    print("不能输入小于零的数字")
                    return 0
                else:
                    for i in range(len(args[0])):
                        args[0][i] = int(args[0][i])
            print(jj)
            return  func(*args, **kwargs)
        return deco
    return wrapper
@number_check("通过math.sqrt(2(C*D)/H)公式计算Q的值")
def calculate(D,H=30,C=50):
    #这里有一个坑，就是round做四舍五入的时候，根本不是数学中的四舍五入，
    # 他是根据你保留位数的前一位是否是奇数来决定的
   Q = np.round(np.sqrt(2*np.multiply(D,C)/H))
   print(Q)
numS = input("输入以逗号分隔的Q:").strip().split(',')
calculate(numS)


